package com.isc.homework03;

import java.io.*;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;

/**
 * 1.编写客户端程序和服务器端程序
 * 2.客户端可以输入一个音乐文件名，比如 高山流水，服务器端接收到音乐名后，可以给客户端
 * 返回这个音乐文件，如果服务器没有这个文件，返回一个默认的音乐即可
 * 3.客户端收到文件后，保存到本地 d:\\
 * 4.提示该程序可以使用StreamUtils。java
 */
public class Client {
    public static void main(String[] args) throws IOException {
        //文件下载，使用TCP协议
        System.out.println("请输入想要获得的音乐文件名:");
        Scanner scanner = new Scanner(System.in);
        String fileName = scanner.next();

        //发送文件名给服务器端
        //目的IP
        String destIp = "127.0.0.1";
        //目的端口
        int destPort = 8888;
        Socket socket = new Socket(InetAddress.getByName(destIp), destPort);
        OutputStream outputStream = socket.getOutputStream();
        outputStream.write(fileName.getBytes());
        socket.shutdownOutput();//结束符
        System.out.println("发送音乐名成功~");

        //客户端收到文件后，保存到本地 d:\\
        //1.读取服务器端发送的数据
        InputStream inputStream = socket.getInputStream();
        if (inputStream != null) {
            System.out.println("客户端程序接收文件成功~");
        }
        //使用处理流来处理数据
        BufferedInputStream bis = new BufferedInputStream(inputStream);
        byte[] buf = new byte[1024];
        int readLength = 0;
        //1.1需要使用ByteArrayOutputStream，将数据写入该流中
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        while ((readLength = bis.read(buf)) != -1) {
            baos.write(buf, 0, readLength);
        }
        //1.2baos将流中的数据转换成byte[] temp 暂存数据
        byte[] temp = baos.toByteArray();

        //2.将暂存数据的temp写入到本地 d:\\
        //客户端需要接收服务器端发送的音乐文件名
        String destFilePath = "d:\\" + fileName + ".avi";
        FileOutputStream fos = new FileOutputStream(destFilePath);
        fos.write(temp);
        System.out.println("文件下载成功~");

        //关闭资源
        fos.close();
        baos.close();
        bis.close();
        outputStream.close();
        socket.close();
    }
}
